package com.fs.erp.api.basedata.service.Impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fs.erp.api.basedata.bo.product.peoperty.QueryProductPropertyBo;
import com.fs.erp.api.basedata.entity.Product;
import com.fs.erp.api.basedata.entity.ProductProperty;
import com.fs.erp.api.basedata.entity.ProductSalepropGroup;
import com.fs.erp.api.basedata.mappers.ProductProperyMapper;
import com.fs.erp.api.basedata.service.ProductPropertyService;
import com.fs.erp.api.basedata.service.ProductService;
import com.fs.erp.api.basedata.vo.QueryProductVo;
import com.fs.erp.api.basedata.vo.product.UpdateProductPropertVo;
import com.fs.erp.api.basedata.vo.storecenter.QueryProductPropertyVo;
import com.fs.erp.common.constants.StringPool;
import com.fs.erp.common.exceptions.impl.DefaultClientException;
import com.fs.erp.common.utils.Assert;
import com.fs.erp.common.utils.BeanUtil;
import com.fs.erp.common.utils.StringUtil;
import com.fs.erp.mybatis.resp.PageResult;
import com.fs.erp.mybatis.utils.PageHelperUtil;
import com.fs.erp.mybatis.utils.PageResultUtil;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductPropertyServiceImpl extends BaseMpServiceImpl<ProductProperyMapper, ProductProperty>
        implements ProductPropertyService {
@Autowired
private ProductProperyMapper productProperyMapper;
    /**
     * 查找
     * @param pageIndex
     * @param pageSize
     * @param vo
     * @return
     */
    @Override
    public PageResult<ProductProperty> query(Integer pageIndex, Integer pageSize, QueryProductPropertyVo vo) {
        Assert.greaterThanZero(pageIndex);
        Assert.greaterThanZero(pageSize);

        PageHelperUtil.startPage(pageIndex,pageSize);
        List<ProductProperty> properties=getBaseMapper().queryProperty(vo);
        return PageResultUtil.convert(new PageInfo<>(properties));
    }

    @Override
    public List<ProductProperty> query(QueryProductPropertyVo vo) {
        return null;
    }

    @Override
    public void updateProperty(UpdateProductPropertVo vo) {
//        ProductProperty property = getBaseMapper().selectById(vo.getId())

        //code是否重复
        Wrapper<ProductProperty> checkCodeWrapper = Wrappers.lambdaQuery(ProductProperty.class)
                .eq(ProductProperty::getCode,vo.getCode()).ne(ProductProperty::getId,vo.getId());
        if (getBaseMapper().selectCount(checkCodeWrapper)>0){
            throw new DefaultClientException("编号重复");
        }

        //name是否重复
        Wrapper<ProductProperty> checkNameWrapper = Wrappers.lambdaQuery(ProductProperty.class)
                .eq(ProductProperty::getName,vo.getName()).ne(ProductProperty::getId,vo.getId());
        if (getBaseMapper().selectCount(checkNameWrapper)>0){
            throw new DefaultClientException("名称重复");
    }

        productProperyMapper.updateAll(vo);

//        Wrapper<ProductProperty> propertyWrapper= Wrappers.lambdaUpdate(ProductProperty.class)
//                .set(ProductProperty::getAvailable,vo.getAvailable())
//                .set(ProductProperty::getCode,vo.getCode())
//                .set(ProductProperty::getColumnType,vo.getColumnType())
//                .set(ProductProperty::getIsRequired,vo.getIsRequired())
//                .set(ProductProperty::getName,vo.getName())
//                .set(ProductProperty::getPropertyType,vo.getPropertyType())
//                .set(ProductProperty::getDescription, StringUtil.isBlank(vo.getDescription())? StringPool.EMPTY_STR:vo.getDescription())
//                .eq(ProductProperty::getId,vo.getId());
//        update(propertyWrapper);
//        ProductProperty property = new ProductProperty();
//        BeanUtil.copyProperties(vo,property,true);
//        getBaseMapper().updateById(property);
    }

    @Override
    public QueryProductPropertyBo seleteById(String id) {
        return getBaseMapper().selectPropertyById(id);
    }

}
